﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Marmat.Foundation
{
    /// <summary>
    /// 编辑窗体控制器接口
    /// </summary>
    public interface IEditFormController
    {
        /// <summary>
        /// 主键值
        /// </summary>
        object Id { get; set; }

        /// <summary>
        /// 获取或设置是否允许编辑。
        /// </summary>
        bool AllowEdit { get; set; }

        /// <summary>
        /// 获取或设置是否允许删除。
        /// </summary>
        bool AllowDelete { get; set; }

        /// <summary>
        /// 判断是否已被修改。
        /// </summary>
        bool HasChanges();

        /// <summary>
        /// 获取控制器关联的EditForm对象。
        /// </summary>
        IEditForm EditForm { get; set; }

        /// <summary>
        /// 创建需要编辑的数据对象。
        /// </summary>
        /// <param name="arguments">传递的参数列表</param>
        void CreateDataObject(params object[] arguments);

        /// <summary>
        /// 加载需要编辑的数据对象。
        /// <param name="arguments">传递的参数列表</param>
        /// </summary>
        void LoadDataObject(params object[] arguments);

        /// <summary>
        /// 删除
        /// </summary>
        /// <returns></returns>
        void Delete();

        /// <summary>
        /// 保存之前的数据验证,代表是否验证通过
        /// </summary>
        bool Verify();

        /// <summary>
        /// 保存
        /// </summary>
        void Save();

        /// <summary>
        /// 撤销已更改的记录。
        /// </summary>
        void RejectChanges();

        /// <summary>
        /// 在状态变更时引发的事件。
        /// </summary>
        event EventHandler StatusChanged;
    }
}
